home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import os
- import gio
- from Placeholder import *
- from Parser import Parser, Token
- from Helper import *
-
- class EvalUtilities:
-
- def __init__(self, view = None):
- self.view = view
- self._init_namespace()
-
-
- def _init_namespace(self):
- self.namespace = {
- '__builtins__': __builtins__,
- 'align': self.util_align,
- 'readfile': self.util_readfile,
- 'filesize': self.util_filesize }
-
-
- def _real_len(self, s, tablen = 0):
- if tablen == 0:
- tablen = self.view.get_tab_width()
-
- return len(s.expandtabs(tablen))
-
-
- def _filename_to_uri(self, filename):
- gfile = gio.File(filename)
- return gfile.get_uri()
-
-
- def util_readfile(self, filename):
- stream = gio.File(filename).read()
- if not stream:
- return ''
- res = stream.read()
- stream.close()
- return res
-
-
- def util_filesize(self, filename):
- gfile = gio.File(filename)
- info = gfile.query_info(gio.FILE_ATTRIBUTE_STANDARD_SIZE)
- if not info:
- return 0
- return info.get_size()
-
-
- def util_align(self, items):
- maxlen = []
- tablen = self.view.get_tab_width()
- for row in range(0, len(items)):
- for col in range(0, len(items[row]) - 1):
- if row == 0:
- maxlen.append(0)
-
- items[row][col] += '\t'
- rl = self._real_len(items[row][col], tablen)
- if rl > maxlen[col]:
- maxlen[col] = rl
- continue
-
-
- result = ''
- for row in range(0, len(items)):
- for col in range(0, len(items[row]) - 1):
- item = items[row][col]
- result += item + '\t' * ((maxlen[col] - self._real_len(item, tablen)) / tablen)
-
- result += items[row][len(items[row]) - 1]
- if row != len(items) - 1:
- result += '\n'
- continue
-
- return result
-
-
-
- class Snippet:
-
- def __init__(self, data):
- self.data = data
-
-
- def __getitem__(self, prop):
- return self.data[prop]
-
-
- def __setitem__(self, prop, value):
- self.data[prop] = value
-
-
- def accelerator_display(self):
- accel = self['accelerator']
- if accel:
- (keyval, mod) = gtk.accelerator_parse(accel)
- accel = gtk.accelerator_get_label(keyval, mod)
-
- if not accel:
- pass
- return ''
-
-
- def display(self):
- nm = markup_escape(self['description'])
- tag = self['tag']
- accel = self.accelerator_display()
- detail = []
- if tag and tag != '':
- detail.append(tag)
-
- if accel and accel != '':
- detail.append(accel)
-
- if not detail:
- return nm
- return nm + ' (<b>' + markup_escape(str.join(', ', detail)) + '</b>)'
-
-
- def _add_placeholder(self, placeholder):
- if placeholder.tabstop in self.placeholders:
- if placeholder.tabstop == -1:
- self.placeholders[-1].append(placeholder)
- self.plugin_data.ordered_placeholders.append(placeholder)
-
- elif placeholder.tabstop == -1:
- self.placeholders[-1] = [
- placeholder]
- self.plugin_data.ordered_placeholders.append(placeholder)
- else:
- self.placeholders[placeholder.tabstop] = placeholder
- self.plugin_data.ordered_placeholders.append(placeholder)
-
-
- def _insert_text(self, text):
- indented = unicode.join('\n' + unicode(self._indent), spaces_instead_of_tabs(self._view, text).split('\n'))
- self._view.get_buffer().insert(self._insert_iter(), indented)
-
-
- def _insert_iter(self):
- return self._view.get_buffer().get_iter_at_mark(self._insert_mark)
-
-
- def _create_environment(self, data):
- if not data in os.environ or os.environ[data]:
- pass
- val = ''
- all_indent = compute_indentation(self._view, self._insert_iter())
- indent = all_indent[len(self._indent):]
- return unicode.join('\n' + unicode(indent), val.split('\n'))
-
-
- def _create_placeholder(self, data):
- tabstop = data['tabstop']
- begin = self._insert_iter()
- if tabstop == 0:
- return PlaceholderEnd(self._view, begin, data['default'])
- if tabstop in self.placeholders:
- return PlaceholderMirror(self._view, tabstop, begin)
- return Placeholder(self._view, tabstop, data['default'], begin)
-
-
- def _create_shell(self, data):
- begin = self._insert_iter()
- return PlaceholderShell(self._view, data['tabstop'], begin, data['contents'])
-
-
- def _create_eval(self, data):
- begin = self._insert_iter()
- return PlaceholderEval(self._view, data['tabstop'], data['dependencies'], begin, data['contents'], self._utils.namespace)
-
-
- def _create_regex(self, data):
- begin = self._insert_iter()
- return PlaceholderRegex(self._view, data['tabstop'], begin, data['input'], data['pattern'], data['substitution'], data['modifiers'])
-
-
- def _create_text(self, data):
- return data
-
-
- def _invalid_placeholder(self, placeholder, remove):
- buf = self._view.get_buffer()
- if placeholder.default and remove:
- buf.delete(placeholder.begin_iter(), placeholder.end_iter())
-
- placeholder.remove()
- if placeholder.tabstop == -1:
- index = self.placeholders[-1].index(placeholder)
- del self.placeholders[-1][index]
- else:
- del self.placeholders[placeholder.tabstop]
- self.plugin_data.ordered_placeholders.remove(placeholder)
-
-
- def _parse(self, plugin_data):
- self._view = plugin_data.view
- self._indent = compute_indentation(self._view, self._view.get_buffer().get_iter_at_mark(self.begin_mark))
- self._utils = EvalUtilities(self._view)
- self.placeholders = { }
- self._insert_mark = self.end_mark
- self.plugin_data = plugin_data
- parser = Parser(data = self['text'])
- while True:
- token = parser.token()
- if not token:
- break
-
-
- try:
- val = {
- 'environment': self._create_environment,
- 'placeholder': self._create_placeholder,
- 'shell': self._create_shell,
- 'eval': self._create_eval,
- 'regex': self._create_regex,
- 'text': self._create_text }[token.klass](token.data)
- except:
- sys.stderr.write('Token class not supported: %s\n' % token.klass)
- continue
-
- if isinstance(val, basestring):
- self._insert_text(val)
- continue
- self._add_placeholder(val)
- if 0 not in self.placeholders:
- self.placeholders[0] = PlaceholderEnd(self._view, self.end_iter(), None)
- self.plugin_data.ordered_placeholders.append(self.placeholders[0])
-
- for tabstop in self.placeholders.copy():
- if not tabstop == -1 or list(self.placeholders[-1]):
- pass
- ph = [
- self.placeholders[tabstop]]
- for placeholder in ph:
- placeholder.run_last(self.placeholders)
- if not (placeholder.ok) or placeholder.done:
- self._invalid_placeholder(placeholder, not (placeholder.ok))
- continue
-
-
- if -1 not in self.placeholders:
- self.placeholders[-1] = []
-
- for tabstop in self.placeholders.copy():
- placeholder = self.placeholders[tabstop]
- if tabstop != -1:
- if isinstance(placeholder, PlaceholderExpand) and placeholder.has_references:
- self.placeholders[-1].append(placeholder)
- del self.placeholders[tabstop]
-
- placeholder.has_references
-
- self.plugin_data = None
-
-
- def insert_into(self, plugin_data, insert):
- buf = plugin_data.view.get_buffer()
- last_index = 0
- (current, next) = plugin_data.next_placeholder()
- if current:
- last_index = plugin_data.placeholders.index(current) + 1
- elif next:
- last_index = plugin_data.placeholders.index(next)
- else:
- last_index = 0
- self.begin_mark = buf.create_mark(None, insert, True)
- self.end_mark = buf.create_mark(None, insert, False)
- self._parse(plugin_data)
- k = self.placeholders.keys()
- k.sort(reverse = True)
- plugin_data.placeholders.insert(last_index, self.placeholders[0])
- last_iter = self.placeholders[0].end_iter()
- for tabstop in k:
- if tabstop != -1 and tabstop != 0:
- placeholder = self.placeholders[tabstop]
- end_iter = placeholder.end_iter()
- if last_iter.compare(end_iter) < 0:
- last_iter = end_iter
-
- plugin_data.placeholders.insert(last_index, placeholder)
- continue
-
- buf.move_mark(self.end_mark, last_iter)
- return self
-
-
- def deactivate(self):
- buf = self.begin_mark.get_buffer()
- buf.delete_mark(self.begin_mark)
- buf.delete_mark(self.end_mark)
- self.placeholders = { }
-
-
- def begin_iter(self):
- return self.begin_mark.get_buffer().get_iter_at_mark(self.begin_mark)
-
-
- def end_iter(self):
- return self.end_mark.get_buffer().get_iter_at_mark(self.end_mark)
-
-
-